import path from 'path';
import multer from 'multer';

const initUpload = function (size=5 * 1024 * 1024,typeReg=/jpeg|jpg|png|gif/,filePath='public/uploads/') {
  // 上传文件的存储方式设置
  const storage = multer.diskStorage({
    // 设置文件存储路径 => 该方法是multer模块自行调用
    destination: function (req, file, next) {
      next(null,filePath);
    },
    // 设置文件名称 => 该方法是multer模块自行调用
    filename: function (req, file, next) {
      // 时间戳+随机数生成的唯一图片名
      let filename = "" + new Date().getTime() + Math.ceil(Math.random() * 10000);
      // 使用唯一值算法生成随意的唯一字符串 => 需要安装对应的算法模块
      // 通过上传文件的原始名称，获取到文件扩展名称
      let ext = path.extname(file.originalname);
      // 随机名拼接扩展名
      filename = filename + ext;
      next(null, filename);
    },
  });

  // 上传文件的大小和类型设置
  const upload = multer({
    storage: storage,
    limits: {
      fileSize: size,
    },
    fileFilter: function (req, file, next) {
      // 图片类型正则
      const filetypes = typeReg;
      // 获取图片的自定义类型
      const mimetype = filetypes.test(file.mimetype);
      // 获取图片的扩展名
      const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
      if (mimetype && extname) {
        next(null, true);
      } else {
        next('只允许上传jpeg、jpg、png、gif文件！');  // 入口文件错误捕捉，其他错误会有英文提示，multer模块中已经集成好了
      }
    },
  });

  return upload;
};

export default initUpload;